package com.gxa.learning.pc.service;

import com.gxa.learning.core.exception.BusinessException;
import com.gxa.learning.core.pojo.CommentVo;
import com.gxa.learning.core.pojo.Course;
import com.gxa.learning.core.pojo.CourseForMain;
import com.gxa.learning.core.pojo.Project;

import java.util.List;
import java.util.Map;

/**
 * @author YXQ
 * @date 2021/12/8 20:25
 */
public interface MainService {

    /**
     * 查看商品信息时，课程的分数+1
     *
     * @param course 点击的是哪门课程
     */
    void incrCourseScore(Map<String, Object> course);

    /**
     * 按点击量从高到低的排序集中获取从头(start)到尾(end)内的元素。
     *
     * @param start 0 第一个
     * @param end   -1 最后一个
     * @return 元素的集合
     */
    List<CourseForMain> getHotCourseByScore(Long start, Long end);

    /**
     * 把课程信息添加到redis中
     *
     * @param course 课程信息
     */
    void addCourse(Course course);

    /**
     * 把培训项目添加到redis
     *
     * @param project 培训项目的信息
     */
    void addProject(Project project);

    /**
     * 收藏/取消收藏 课程
     *
     * @param userId   用户的id
     * @param courseId 课程的id
     * @param love     1收藏0取消收藏
     */
    void loveCourse(Long userId, Long courseId, Integer love) throws BusinessException;

    /**
     * 获取我收藏的所有的课程
     *
     * @param userId 用户的id
     * @return 课程的集合
     */
    List<Course> getLoveCourse(Long userId);

    /**
     * 评论与回复的方法
     * string+hash
     *
     * @param userId   当前评论用户的id
     * @param courseId 评论的课程的id
     * @param remark   评论的内容
     * @param pId      直接评论->pId为0,回复->pid为一级评论的编号
     * @param reply    被回复的人
     */
    void comment(Long userId, Long courseId, String remark, Long pId, String reply);

    /**
     * 点赞评论的方法
     * set
     *
     * @param userId   用户的id
     * @param courseId 课程的id
     * @param remarkId 评论的id
     * @param isLike   1点赞 0取消点赞
     */
    void likeComment(Long userId, Long courseId, Long remarkId, Integer isLike);

    /**
     * 获取评论列表的方法
     * hash+set
     *
     * @param userId   用户的编号
     * @param courseId 课程的编号
     * @return 评论列表的集合
     */
    List<CommentVo> getCommentList(Long userId, Long courseId);
}
